package com.kaoshi.myweb.webstruts.support;

import java.util.Map;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.PreResultListener;
import com.opensymphony.xwork2.ognl.OgnlValueStack;
import com.opensymphony.xwork2.util.CompoundRoot;
import com.opensymphony.xwork2.util.ValueStack;

/**
 * 在开发当中，常常需要在action执行完毕，而result还没有开始执行的时候，做一些处
*理，比如异常处理。当作一个基本的事件来处理，也就是在事件源的地方注册监听器，监听到
*事件后，转发到相应的执行方法上，当然还是要实现相应的监听器的，示例如下：
*注册部分的代码：
*PreResultListener pr = new MyBeforeResult ();
*ActionContext. getContext ().getActionInvocation().addPreResultListener(pr);
*上面的代码写在自定义interceptor的执行方法中的，放到actionInvocation.invoke()之前。
 * @author Administrator
 *
 */
public class MyBeforeResult implements PreResultListener {

	@Override
	public void beforeResult(ActionInvocation invocation, String resultCode) {
//		与 Interceptor，不同的是，可以修改 ValueStack
		System.out.println("-------监听Result执行前事件,现在处理Result执行前的功能,可以修改ValueStack----");
		
		ValueStack valueStack = invocation.getInvocationContext().getValueStack();
		Map<String, Object> map =  valueStack.getContext();
		CompoundRoot compoundRoot = valueStack.getRoot();
		for (int i = 0; i < compoundRoot.size(); i++) {
			Object object = compoundRoot.get(i);
			System.out.println(object);
		}
		
		invocation.getInvocationContext().getValueStack().set("account", "被修改了");
	}

}
